package cn.lg.soar.system.biz.modules.account.service;

import cn.lg.soar.system.biz.modules.account.model.*;
import cn.lg.soar.system.biz.modules.sso.entity.SsoApply;

/**
 * 单点登录服务端
 * @author luguoxiang
 * @date 2022/5/28
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface ISsoServerService {

    /**
     * 客户端上线（返回服务端信息和访问token）
     * @param clientInfo
     * @return
     */
    SsoServerInfo online(SsoClientInfo clientInfo);

    /**
     *
     * @param userId
     * @return
     */
    String getTicket(Long userId);

    /**
     * 单点登录验证
     * @param validation
     * @return
     */
    SsoUser validation(SsoValidation validation);

    /**
     * 单点登录退出
     * @param user
     */
    void logout(SsoNotifyServerLogout user);

    /**
     * 客户端下线
     * @param token
     */
    void offline(String token);

    /**
     * 获取token
     * @param clientId
     * @return
     */
    String getToken(Long clientId);

    /**
     * 解析token
     * @param token
     * @return
     */
    Long parseToken(String token);

    /**
     * 通知所有客户端用户下线
     * @param user
     */
    void notifyAllClientLogout(SsoUserBase user);

    /**
     * 通知客户端用户下线
     * @param clientId
     * @param user
     */
    void notifyClientLogout(Long clientId, SsoUserBase user);

    /**
     * 通知客户端用户下线
     * @param client
     * @param user
     */
    void notifyClientLogout(SsoApply client, SsoUserBase user);
}
